# 五、数组的运算

import numpy as np

# 5.1 数组与系数之间的运算
# 略

# 5.2 数组与数组之间的运算
# ！！！！！！！！！！！！！！！！！！！！！！！！
# 注意，同维度数组间的运算即对应元素之间的运算！
# 运算符都被重载成了对应元素之间的运算！！
# ！！！！！！！！！！！！！！！！！！！！！！！！
# 略

# # 5.3 广播
# # 讲解不同形状的数组之间的运算。
# # 仅讨论二维数组之内的情况，不同形状的数组之间的运算有以下规则：
# #  如果是向量与矩阵之间做运算，向量自动升级为行矩阵；
# #  如果某矩阵是行矩阵或列矩阵，则其被广播，以适配另一个矩阵的形状。
# # （1）向量被广播
# # 当一个形状为(x,y)的矩阵与一个向量做运算时，要求该向量的形状必须为 y，
# # 运算时向量会自动升级成形状为(1,y)的行矩阵，
# # 该形状为(1,y)的行矩阵再自动被广播为形状为(x,y)的矩阵
# # 即行向量重复x次，
# # 这样就与另一个矩阵的形状适配了。
# print("向量被广播")
# arr1 = np.array([-100,0,100])# 向量
# print("arr1\n", arr1)
# arr2 = np.random.random( (10,3) )# 矩阵
# print("arr2\n", arr2)
# print("arr1 * arr2\n", arr1 * arr2)# 广播 向量重复多次，产生对应矩阵，进行运算
# # （2）列矩阵被广播
# # 当一个形状为(x,y)的矩阵与一个列矩阵做运算时，要求该列矩阵的形状必须为(x,1)，
# # 该形状为(x,1)的列矩阵再自动被广播即重复y次，形成(x,y)的矩阵，
# # 这样就与另一个矩阵的形状适配了。
# arr3 = np.arange(3).reshape(3,1)
# print("arr3\n", arr3)
# arr4 = np.ones((3,5))
# print("arr4\n", arr4)
# print("arr3 * arr4\n", arr3 * arr4)# 广播 重复多次，产生对应矩阵，进行运算
# # （3）行矩阵与列矩阵同时被广播
# # 当一个形状为(1,y)的行矩阵与一个形状为(x,1) 的列矩阵做运算时
# # 这俩矩阵都会被自动广播为形状为(x,y)的矩阵
# # 这样就互相适配了
# print("arr1 * arr3\n", arr1 * arr3)

